package com.basker.pisces.domain.enums;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.springframework.core.io.Resource;

import com.basker.pisces.core.resource.IResourceLoader;
import com.basker.pisces.core.resource.annotation.ResouceLoader;
import com.basker.pisces.core.serialize.xml.DataContractXmlSerializer;
import com.basker.pisces.domain.value.meta.EnumType;
import com.basker.pisces.domain.value.meta.EnumType.EnumTypeData;

/**
 * {@link IEnumTypeProvider}的默认实现，开发人员可以在路径
 * classpath*:enumType下通过xml文件定义枚举类型，XML的内容为{@link EnumTypeData}的XML序列化
 *
 * @author hangwen
 */
@ResouceLoader(locationPatterns = "classpath*:enumType/*.xml")
class ResourceEnumTypeProvider implements IResourceLoader, IEnumTypeProvider {

    private List<EnumType> enumTypes = new ArrayList<>();

    @Override
    public List<EnumType> getEnumTypes() {
        return enumTypes;
    }

    @Override
    public void load(Resource[] resources) throws IOException {
        DataContractXmlSerializer serializer = new DataContractXmlSerializer(EnumTypeData.class);

        for (Resource resource : resources) {
            EnumTypeData enumTypeData = (EnumTypeData) serializer.deserializeFromUrl(resource.getURL());

            for (EnumType enumType : enumTypeData.getEnumTypes()) {
                enumTypes.add(enumType);
            }
        }

    }

}
